import { interval} from "rxjs";
/**
 * Created by ztt on 2018/12/8.
 */
function fn(){
    var observable=interval(1000);
    var subscription = observable.subscribe((x:any) => console.log('subscription：',x));
    // 稍后：
    // 这会取消正在进行中的 Observable 执行
    // Observable 执行是通过使用观察者调用 subscribe 方法启动的
    setTimeout(()=>{
        subscription.unsubscribe();
    },5000);
}

/**
 todo:Subscription合并
 父取消时，子也被取消：多个observable
 **/
function fn01(){
    var observable01a=interval(800);
    var observable01b=interval(400);
    let pSubscription=observable01a.subscribe((x:any)=>{
        console.log('01a：',x);
    });
    let cSubscription=observable01b.subscribe((x:any)=>{
        console.log('   01b：',x);
    });
//合并
    pSubscription.add(cSubscription);
    setTimeout(() => {
        // pSubscription 和 cSubscription 都会取消订阅
        pSubscription.unsubscribe();
    }, 4000);
}

/**
 todo:Subscription合并
 父取消时，子也被取消:：同一个observable，被不同subscribe订阅
 **/
function fn02(){
    var observable02=interval(800);
    let sub02a=observable02.subscribe((x:any)=>{
        console.log('02a：',x);
    });
    let sub02b=observable02.subscribe((x:any)=>{
        console.log('   02b：',x);
    });
//合并
    sub02a.add(sub02b);
    setTimeout(() => {
        // sub02a 和 sub02b 都会取消订阅
        sub02a.unsubscribe();
    }, 4000);
}
/**
 todo:Subscription合并
 父取消时，子也被取消:：同一个observable，被不同subscribe订阅
 **/
function fn03(){
    var observable03=interval(800);
    let sub03a=observable03.subscribe((x:any)=>{
        console.log('03a：',x);
    });
    let sub03b=observable03.subscribe((x:any)=>{
        console.log('   03b：',x);
    });
    //合并
    sub03a.add(sub03b);
    setTimeout(() => {
        sub03b.unsubscribe();
    }, 2000);
    sub03a.add(sub03b);
    setTimeout(() => {
        // sub03a 和 sub03b 都会取消订阅
        sub03a.unsubscribe();
    }, 4000);
}
/**
 todo:Subscription合并
 通过remove移除子subscribe，移除后还是继续执行，直到父结束
 **/
function fn04(){
    var observable04=interval(800);
    let sub04a=observable04.subscribe((x:any)=>{
        console.log('04a：',x);
    });
    let sub04b=observable04.subscribe((x:any)=>{
        console.log('   04b：',x);
    });
    //合并
    sub04a.add(sub04b);
    setTimeout(() => {
        sub04a.remove(sub04b);
    }, 2000);
    sub04a.add(sub04b);
    setTimeout(() => {
        // sub04a 和 sub04b 都会取消订阅
        sub04a.unsubscribe();
    }, 4000);
}
fn04();
